ComponentClass

Otázka od: david@nj.hcv.cz

11. 8. 2004 11:47

Zdravim...
With TButton(FindComponent(jmeno)) do - tohle je normalni vec ale musi to
byt button ,chtel bych aby to bylo univerzalni a ja bych jen pres nejaky
parametr udal co je to za typ ,ale kdyz dam promenou
napr.Typ:TComponentClass....pak to zavolam jako Treba > With
(FindComponent(jmeno) as Typ) do - tak to nejde....please help!!!


****************************
David Go+AVk-ula, HCV group a.s.
 Van+AQ0-urova 40,Nov+AP0- Ji+AQ0A7Q-n
  www.nj.hcv.cz/maddave/
       www.hcv.cz





Odpovedá: Ing. Jiri Sokol

11. 8. 2004 12:40

> Od: david@nj.hcv.cz
> Datum: 11.08.2004 12:48:40

> With TButton(FindComponent(jmeno)) do - tohle je normalni vec ale musi to
byt button ,chtel bych aby to bylo univerzalni a ja bych jen pres nejaky
parametr udal co je to za typ ,ale kdyz dam promenou
napr.Typ:TComponentClass....pak to zavolam jako Treba > With
(FindComponent(jmeno) as Typ) do - tak to nejde....please help!!!

Ahoj!
Mno, snad dobre chapu. Mas nejaky kus kodu, ktery se hodi pro vice trid nez jen
TButton. Pak ale tyhle tridy musi mit neco spolecneho, ne? Ze by nejakeho
predka?   Cili hledal bych spolecneho predka, od ktereho jsou pozadovane
tridy odvozeny a je to!
Neco jako:
with TWinControl(FindComponent(jmeno)) do
Ahoj
Jirka
--------------------------------------------------
Ing. Jiri Sokol; jiri.sokol@seznam.cz; 972 231 187
D6Prof+SP3; WinXPProf+SP1; FB 1.5.0
programator amater

Odpovedá: david@nj.hcv.cz

11. 8. 2004 13:36

Ahoj!
Mno, snad dobre chapu. Mas nejaky kus kodu, ktery se hodi pro vice trid nez jen
TButton. Pak ale tyhle tridy musi mit neco spolecneho, ne? Ze by nejakeho
predka?   Cili hledal bych spolecneho predka, od ktereho jsou pozadovane
tridy odvozeny a je to!
Neco jako:
with TWinControl(FindComponent(jmeno)) do


No to je sice pekne tak by to bylo super kdyby to slo,ale bohuzel pokud chci
nastavit treba barvu tak

nazev='Label1'

  With TWinControl(FindComponent(nazev)) do
   begin
    Color:=clRed;
  end;

Nezmeni se nic.....
a nebo

  With TLabel(FindComponent(nazev)) do
   begin
    Color:=clRed;
  end;

tak se to zmeni.....tak nevim.....





Odpovedá: Marian Nykel

11. 8. 2004 13:46

Ale TLabel neni (aspon v Delphi) potomkem TWinControl, takze zkus pouzit
"obecnejsiho" predka, treba TControl...

mANY

david@nj.hcv.cz wrote:
> With TWinControl(FindComponent(nazev)) do
> begin
> Color:=clRed;
> end;
>
> Nezmeni se nic.....
> a nebo
>
> With TLabel(FindComponent(nazev)) do
> begin
> Color:=clRed;
> end;
>
> tak se to zmeni.....tak nevim...


Odpovedá: Milan Tomes

11. 8. 2004 14:15

IMHO to co chces je resitelne pouze pres RTTI.

S pozdravem

Milan Tomes

P.S.: Za domaci ukol by ses mel podivat na to, jak se pisou komponenty a co
to vlastne presne chces... Sam pak prijdes na to, ze "normalnimi" postupy je
to nemozne...  

> [mailto:delphi-l-owner@clexpert.cz]On Behalf Of david@nj.hcv.cz
> Sent: Wednesday, August 11, 2004 2:36 PM
>
> No to je sice pekne tak by to bylo super kdyby to slo,ale bohuzel
> pokud chci nastavit treba barvu tak
>
> nazev='Label1'
>
> With TWinControl(FindComponent(nazev)) do
> begin
> Color:=clRed;
> end;
>
> Nezmeni se nic.....
> a nebo
>
> With TLabel(FindComponent(nazev)) do
> begin
> Color:=clRed;
> end;
>
> tak se to zmeni.....tak nevim.....


Odpovedá: Svoboda Jiri

11. 8. 2004 14:13

Snad takhle ..

procedure SetColorProperty(Ctrl: TControl; FColor: TColor);
var i: integer;
begin
  if Assigned(GetPropinfo(ctrl,'Color')) then
SetOrdProp(ctrl,'Color',FColor);
end;

Delphi 5

Odpovedá: Daniel Frantik

11. 8. 2004 15:22

> [mailto:delphi-l-owner@clexpert.cz] On Behalf Of david@nj.hcv.cz
> nazev='Label1'
>
> With TWinControl(FindComponent(nazev)) do
> begin
> Color:=clRed;
> end;
Tady volas Color od formulare

 
> With TLabel(FindComponent(nazev)) do
> begin
> Color:=clRed;
> end;
Tady uz je to spravne

Reseni
  1) nepouzivej tu silenou konstrukce with - nevis co volas
  2) pouzij RTTI (a nebo ve specialnim pripade 3)
  3) pokud existuje nejaky spolecny predek (v tvem pripade TControl)
pouzij nastaveni na spolecnem predkovi
     type
      THackControl=class(TControl) //pouze publikuje property
      public
        property color;
      end;
   ...
   THackControl(FindControl(Nazev)).Color:=clRed;
  //popr. o neco mene prehledneji bez THackControl:
    TEdit(FindControl(Nazev)).Color:=clRed;
    //misto TEdit muze byt cokoliv co je potomek TControl a ma public
property Color a nema ji prekrytou vlastni property pozdeji ... (napr.
TLabel, TPanel apod  

Danik